#include <climits>
#include <iostream>
#include <vector>
#include <queue>
using namespace std;


//int main() {
//    string str1;
//    string str2;
//    cin >> str1;
//    cin >> str2;
//    int n = str1.size();
//    int m = str2.size();
//    int ret = n;
//    for (int i = 0; i <= m - n; i++)
//    {
//        int tmp = 0;
//        for (int j = 0; j < n; j++)
//        {
//            if (str1[j] != str2[i + j])
//            {
//                tmp++;
//            }
//        }
//        ret = min(tmp, ret);
//    }
//    cout << ret << endl;
//    return 0;
//}
//
//int b = 0;
//int n;
//int arr[51] = { 0 };
//
//bool fun()
//{
//    for (int i = 0; i < n; i++)
//    {
//        if (b % arr[i])
//        {
//            return false;
//        }
//        int x = b / arr[i];
//        if (x & (x - 1))
//        {
//            return false;
//        }
//    }
//    return true;
//}
//
//int main() {
//    cin >> n;
//    for (int i = 0; i < n; i++)
//    {
//        cin >> arr[i];
//        b = max(arr[i], b);
//    }
//    if (fun())
//    {
//        cout << "YES" << endl;
//    }
//    else
//    {
//        cout << "NO" << endl;
//    }
//    return 0;
//}
//
//int main() {
//    vector<string> ret;
//    int n;
//    cin >> n;
//    while (n--)
//    {
//        string str;
//        cin >> str;
//        sort(str.begin(), str.end());
//        int k = ret.size();
//        int j = 0;
//        for (int i = 0; i < k; i++)
//        {
//            if (ret[i].size() != str.size())
//            {
//                j++;
//                continue;
//            }
//            for (int x1 = 0; x1 < str.size(); x1++)
//            {
//                if (str[x1] != ret[i][x1])
//                {
//                    j++;
//                    break;
//                }
//            }
//        }
//        if (j == k)
//        {
//            ret.push_back(str);
//        }
//    }
//    cout << ret.size() << endl;
//    return 0;
//}
//
class Solution {
public:
    bool dp[205][205] = { 0 };
    int n1;
    int n2;
    int dx[4] = { 0,0,1,-1 };
    int dy[4] = { 1,-1,0,0 };
    int ret = 0;
    queue<pair<int, int>> q;

    void dps(int x, int y, vector<vector<int> >& m)
    {
        dp[x][y] = true;
        for (int i = 0; i < 4; i++)
        {
            int x1 = x + dx[i];
            int y1 = dy[i] + y;
            if (x1 >= 0 && x1 < n1 && y1 >= 0 && y1 < n2 && !dp[x1][y1] && m[x][y] == 1)
            {
                dps(x1, y1, m);
            }
        }
    }

    int citys(vector<vector<int> >& m) {
        // write code here
        int n1 = m.size();
        int n2 = m[0].size();


        for (int i = 0; i < n1; i++)
        {
            for (int j = 0; j < n2; j++)
            {
                if (m[i][j] == 1)
                {
                    q.push({ i,j });
                }
            }
        }

        while (q.size())
        {
            auto [x, y] = q.front();
            q.pop();
            if (!dp[x][y])
            {
                ret++;
                dps(x, y, m);
            }
        }
        return ret;
    }
};

int main()
{
    vector<vector<int>> m = { {1,1,0},{ 1,1,0},{ 0,0,1 } };
    Solution s;
    s.citys(m);
    return 0;
}

int main() {
    int t;
    cin >> t;
    while (t--)
    {
        int h, a, H, A;
        cin >> h >> a >> H >> A;
        int r1 = H / a + (H % a == 0 ? 0 : 1);
        int r2 = h / A + (h % A == 0 ? 0 : 1);
        int x = (r1 - 1) * A;
        if (a >= H)
        {
            cout << -1 << endl;
        }
        else
        {
            cout << h / x - (h % x == 0 ? 1 : 0) << endl;
        }
    }
    return 0;
}
